Update runtime providers' context object on EventPipe rundown #36733
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix #36728.
When the runtime fires events, it does not use the standard EventPipeProvider keywords. Instead, it keeps track of these variables through static
DOTNET_TRACE_CONTEXT
structs. This struct was made because most parts of the runtime uses theMCGEN_TRACE_CONTEXT
object (which goes all the way back to the Framework days) to check whether an event is enabled before populating payload and firing an event. To keep the macros that are used to check this around for LTTng and EventPipe, we came up with a similar struct that can be reused throughout the runtime.When a trace session starts and rundown was requested, it deregisters the event via EtwCallbackCommon callback with a control code to disable the provider.
However, this control code gets ignored in the callback and the provider wasn't using the IsEnabled field in
EventPipeHelper::IsEnabled
.This PR fixes this by addressing these two issues:
EventPipeHelper::IsEnabled
wasn't using the IsEnabled fieldcc @tommcdon